package org.example.exception;

import org.example.constant.ErrorCode;
import org.example.utils.Result;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.stream.Collectors;

/**--------------------------------------------------------
全局异常处理
 @RestControllerAdvice ：贴在类上，这个类就可以在controller的方法执行前，或者执行后做一些事情
 --------------------------------------------------------**/
//@ControllerAdvice
@RestControllerAdvice
public class     GlobleExceptionHandler {

    //拦截异常 : 这个注解就可以拦截器 GlobleException 异常
    @ExceptionHandler(GlobleException.class)
    public Result globleException(GlobleException e){
        e.printStackTrace();
        return Result.error(e.getMessage());
    }
    //拦截器其他异常
    @ExceptionHandler(Exception.class)
    public Result exception(Exception e){
        e.printStackTrace();
        if(e.getClass().getName().equals("org.springframework.security.access.AccessDeniedException")){
            return Result.error("无权限,请充值");
        }
        System.out.println(e.getMessage());
        return Result.error(ErrorCode.SYSTEM_ERROR);
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result MANVException(MethodArgumentNotValidException e){
        e.printStackTrace();
        String errorMsg = e.getBindingResult().getFieldErrors().stream()
                        .map(error ->error.getField()+ ":"  + error.getDefaultMessage() )
                .collect(Collectors.joining(","));
        return Result.error(errorMsg);
    }
}